package com.me.study.javaCore.enumm;

import java.util.HashMap;
import java.util.Map;

/**
 * 枚举类
 *
 * @author ME
 * @date 2020/1/14
 */
public enum ColorEnum222 implements Strategy {

    /**红色*/
    RED("91", "红色") {
        @Override
        public Object doSomething(String str) {
            System.out.println("一顿操作，【" + str + "】变成了 红色");
            return null;
        }
    },
    /**绿色*/
    GREEN("92", "绿色"),
    /**黑色*/
    BLACK("93", "黑色"),
    /**黄色*/
    YELLOW("94", "黄色"),
    /** 白色 */
    WHITE("95", "白色") {
        @Override
        public Object doSomething(String str) {
        System.out.println("一顿操作，【" + str + "】变成了 白色");
        return null;
        }
    };

    /** 颜色编码 */
    private final String code;
    /** 颜色中文名 */
    private final String desc;

    ColorEnum222(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    /**
     * 初始化枚举类时，生成静态自定义的 map，缓存 值映射的集合，比如 字典值--值描述
     */
    private static Map<String, ColorEnum222> desc2EnumMap = new HashMap<>();
    private static Map<String, String> code2DescMap = new HashMap<>();
    static {
        for (ColorEnum222 type: ColorEnum222.values()) {
            desc2EnumMap.put(type.getDesc(), type);
            code2DescMap.put(type.getCode(), type.getDesc());
        }
    }

    /**
     * 颜色中文名 --> 编码
     */
    public static ColorEnum222 desc2Enum(String desc) {
        return desc2EnumMap.get(desc);
    }

    /**
     * 颜色编码 --> 中文名
     */
    public static String code2Desc(String code) {
        return code2DescMap.get(code);
    }

    /**
     * 根据传入的颜色，做不同的处理，并返回结果
     *
     * @param color 颜色 name
     * @param param 处理的参数
     * @return 处理结果
     */
    public static Object doSomeByColor(String color, String param) {
        return ColorEnum222.valueOf(color).doSomething(param);
    }

    public String getDesc() {
        return desc;
    }

    public String getCode() {
        return code;
    }

}
